#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>

int main()
{
  const char *str1 = "hello,printf\n";
  const char *str2 = "hello,fprintf\n";
  const char *str3 = "hello,fputs\n";
  const char *str4 = "hello,write\n";

  //C语言库函数
  printf(str1);
  fprintf(stdout,str2);
  fputs(str3,stdout);

  //系统接口
  write(1,str4,strlen(str4));

  //在调用完上面的代码后，再执行fork()
  fork();

}
//int main()
//{
//  //printf("hello,printf\n");  //stdout -- 1
//  printf(" hello,printf");  
//  fprintf( stdout,"hello,fprintf");  
//  fputs(" hello,fputs",stdout);
//  
//  //const char *msg = "hello,write\n";
//  const char *msg = "hello,write";
//  write(1,msg,strlen(msg));
//  
//  //close(1);
//  sleep(5);
//  close(stdout->_fileno);
//  return 0;
//}

//int main()
//{
//  //close(0);
//  //close(1);
//  //close(2);
//  //int fd = open("log.txt",O_WRONLY | O_CREAT | O_TRUNC,0666);
//  //int fd = open("log.txt",O_WRONLY | O_CREAT | O_APPEND,0666);
//  int fd = open("log.txt",O_RDONLY);
//  if(fd < 0)
//  {
//    perror("open");
//    return 0;
//  }
//
//  dup2(fd,0);
//  //dup2(fd,1);
//  ////当然这里我们也可以将成功被拷贝的关闭
//  //int ret = dup2(fd,1);  //fd = 3 ， 1
//  //if(ret > 0)
//  //  close(fd);          //即当3指向的内容被成功拷贝至1的指向，就关闭3，因为最终使用的仍是1作为标志索引
//  //printf("ret: %d\n",ret); 
//  
//  char line[64];  //举个例子
//  //fegts是从特定的流当中将数据读到缓冲区
//  while(fgets(line, sizeof line, stdin) != NULL)
//  {
//    printf("%s\n",line);
//  }
//
//  fprintf(stdout,"打开文件成功，fd: %d\n",fd);
//  fflush(stdout);
//  close(fd);
//}
